package LL1;

public class Main {

    //定义链表节点
    static class ListNode {
        private int val;  //链表的数据域
        private ListNode next; //链表的指针域

        public ListNode(int val) {
            this.val = val;
            this.next = null;
        }

    }

    //添加链表节点
    private static void insertNode(ListNode node, int data) {
        if (node == null) {
            return;
        }
        //创建一个新节点
        ListNode newNode = new ListNode(data);
        ListNode cur = node;
        while (cur.next != null) {
            cur = cur.next;  //移动指针变量
        }
        cur.next = newNode;  //末尾节点的next指针域连接新节点
    }

    //打印链表（从头节点开始打印链表的每一个节点）
    private static void printNode(ListNode node) {
        ListNode cur = node;
        //遍历每一个节点
        while (cur != null) {
            System.out.print(cur.val+"\t");
            cur = cur.next;
        }
        System.out.println();
    }
    public static void main(String[] args) {
        ListNode head = new ListNode(1);
        head.next = new ListNode(123);  //更改指针域（方法：变量（指针）名.Next=新节点）
        head.next.next = new ListNode(456);  //给head 指针变量指向节点的 下下节点 添加节点
        head.next.next.next = new ListNode(789);

        ListNode tmp = head; //指针变量赋值
        tmp = tmp.next; //移动指针变量
        tmp.next = null; // 通过tmp指针变量更改节点的指针域:截断链表（tmp为：地址引用。与head指向相同的地址，操作同一份数据）
        tmp.next = new ListNode(100); // 通过tmp指针变量更改节点的指针域：增加节点

        head.next.next = null;

        System.out.println("********************************************");
        ListNode root = new ListNode(10);
        insertNode(root,20);
        insertNode(root,30);
        insertNode(root,40);
        insertNode(root,50);
        insertNode(root,60);

        System.out.println("********************************************");
        printNode(root);
    }

}
